<!DOCTYPE HTML>

<html lang="en">
<head>

<title>UserCache (spring-security-docs 5.6.3 API)</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../jquery/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../jquery/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../../../../jquery/jquery-3.5.1.js"></script>
<script type="text/javascript" src="../../../../../jquery/jquery-ui.js"></script>
</head>
<body>
<script type="text/javascript"><!--
    try {
        if (location.href.indexOf('is-external=true') == -1) {
            parent.document.title="UserCache (spring-security-docs 5.6.3 API)";
        }
    }
    catch(err) {
    }
//-->
var data = {"i0":6,"i1":6,"i2":6};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../../../../";
var useModuleDirectories = true;
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">

<div class="topNav"><a id="navbar.top">

</a>
<div class="skipNav"><a href="UserCache.html#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">

</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<ul class="navListSearch">
<li><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_top");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="UserCache.html#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="UserCache.html#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.top">

</a></div>

</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>

<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">org.springframework.security.core.userdetails</a></div>
<h2 title="Interface UserCache" class="title">Interface UserCache</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Known Implementing Classes:</dt>
<dd><code><a href="cache/EhCacheBasedUserCache.html" title="class in org.springframework.security.core.userdetails.cache">EhCacheBasedUserCache</a></code>, <code><a href="cache/NullUserCache.html" title="class in org.springframework.security.core.userdetails.cache">NullUserCache</a></code>, <code><a href="cache/SpringCacheBasedUserCache.html" title="class in org.springframework.security.core.userdetails.cache">SpringCacheBasedUserCache</a></code></dd>
</dl>
<hr>
<pre>public interface <span class="typeNameLabel">UserCache</span></pre>
<div class="block">Provides a cache of <a href="UserDetails.html" title="interface in org.springframework.security.core.userdetails"><code>UserDetails</code></a> objects.
<p>
Implementations should provide appropriate methods to set their cache parameters (e.g.
time-to-live) and/or force removal of entities before their normal expiration. These
are not part of the <code>UserCache</code> interface contract because they vary
depending on the type of caching system used (in-memory, disk, cluster, hybrid etc.).
<p>
Caching is generally only required in applications which do not maintain server-side
state, such as remote clients or web services. The authentication credentials are then
presented on each invocation and the overhead of accessing a database or other
persistent storage mechanism to validate would be excessive. In this case, you would
configure a cache to store the <tt>UserDetails</tt> information rather than loading it
each time.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../authentication/dao/AbstractUserDetailsAuthenticationProvider.html" title="class in org.springframework.security.authentication.dao"><code>AbstractUserDetailsAuthenticationProvider</code></a></dd>
</dl>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">

<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.summary">

</a>
<h3>Method Summary</h3>
<table class="memberSummary">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code><a href="UserDetails.html" title="interface in org.springframework.security.core.userdetails">UserDetails</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="UserCache.html#getUserFromCache(java.lang.String)">getUserFromCache</a></span>&#8203;(java.lang.String&nbsp;username)</code></th>
<td class="colLast">
<div class="block">Obtains a <a href="UserDetails.html" title="interface in org.springframework.security.core.userdetails"><code>UserDetails</code></a> from the cache.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="UserCache.html#putUserInCache(org.springframework.security.core.userdetails.UserDetails)">putUserInCache</a></span>&#8203;(<a href="UserDetails.html" title="interface in org.springframework.security.core.userdetails">UserDetails</a>&nbsp;user)</code></th>
<td class="colLast">
<div class="block">Places a <a href="UserDetails.html" title="interface in org.springframework.security.core.userdetails"><code>UserDetails</code></a> in the cache.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="UserCache.html#removeUserFromCache(java.lang.String)">removeUserFromCache</a></span>&#8203;(java.lang.String&nbsp;username)</code></th>
<td class="colLast">
<div class="block">Removes the specified user from the cache.</div>
</td>
</tr>
</table>
</li>
</ul>
</section>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">

<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.detail">

</a>
<h3>Method Detail</h3>
<a id="getUserFromCache(java.lang.String)">

</a>
<ul class="blockList">
<li class="blockList">
<h4>getUserFromCache</h4>
<pre class="methodSignature"><a href="UserDetails.html" title="interface in org.springframework.security.core.userdetails">UserDetails</a>&nbsp;getUserFromCache&#8203;(java.lang.String&nbsp;username)</pre>
<div class="block">Obtains a <a href="UserDetails.html" title="interface in org.springframework.security.core.userdetails"><code>UserDetails</code></a> from the cache.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>username</code> - the <a href="User.html#getUsername()"><code>User.getUsername()</code></a> used to place the user in the cache</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the populated <code>UserDetails</code> or <code>null</code> if the user
could not be found or if the cache entry has expired</dd>
</dl>
</li>
</ul>
<a id="putUserInCache(org.springframework.security.core.userdetails.UserDetails)">

</a>
<ul class="blockList">
<li class="blockList">
<h4>putUserInCache</h4>
<pre class="methodSignature">void&nbsp;putUserInCache&#8203;(<a href="UserDetails.html" title="interface in org.springframework.security.core.userdetails">UserDetails</a>&nbsp;user)</pre>
<div class="block">Places a <a href="UserDetails.html" title="interface in org.springframework.security.core.userdetails"><code>UserDetails</code></a> in the cache. The <code>username</code> is the key
used to subsequently retrieve the <code>UserDetails</code>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>user</code> - the fully populated <code>UserDetails</code> to place in the cache</dd>
</dl>
</li>
</ul>
<a id="removeUserFromCache(java.lang.String)">

</a>
<ul class="blockListLast">
<li class="blockList">
<h4>removeUserFromCache</h4>
<pre class="methodSignature">void&nbsp;removeUserFromCache&#8203;(java.lang.String&nbsp;username)</pre>
<div class="block">Removes the specified user from the cache. The <code>username</code> is the key
used to remove the user. If the user is not found, the method should simply return
(not thrown an exception).
<p>
Some cache implementations may not support eviction from the cache, in which case
they should provide appropriate behaviour to alter the user in either its
documentation, via an exception, or through a log message.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>username</code> - to be evicted from the cache</dd>
</dl>
</li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
</div>
</main>

<footer role="contentinfo">
<nav role="navigation">

<div class="bottomNav"><a id="navbar.bottom">

</a>
<div class="skipNav"><a href="UserCache.html#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">

</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_bottom");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="UserCache.html#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="UserCache.html#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.bottom">

</a></div>

</nav>
</footer>
<script>if (window.parent == window) {(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','//www.google-analytics.com/analytics.js','ga');ga('create', 'UA-2728886-23', 'auto', {'siteSpeedSampleRate': 100});ga('send', 'pageview');}</script><script defer src="https://static.cloudflareinsights.com/beacon.min.js/v652eace1692a40cfa3763df669d7439c1639079717194" integrity="sha512-Gi7xpJR8tSkrpF7aordPZQlW2DLtzUlZcumS8dMQjwDHEnw9I7ZLyiOj/6tZStRBGtGgN6ceN6cMH8z7etPGlw==" data-cf-beacon='{"rayId":"7040bde46853980c","token":"bffcb8a918ae4755926f76178bfbd26b","version":"2021.12.0","si":100}' crossorigin="anonymous"></script>
</body>
</html>
